# 内存中，数值都是以补码形式存储的；
# 正数的原码、反码和补码都一样；
# 负数的补码 = 反码 + 1；反码 = 诸位取反，但符号位不变，保证还是一个负数；
# -6
# 10000000 .. 00000110 原码
# 11111111 .. 11111001 反码
# 11111111 .. 11111010 补码

print(~5)
# 5
# 00000000 .. 00000101
# 对 5 进行取反
# 11111111 .. 11111010 这就是 ~5 的结果的原码；可以看到和 -6 的补码完全一致，所以结果就是 -6；

# 本来我的计算方式是先减1再取反得到反码，保留符号位：
# 11111111 .. 11111001 这就是反码，然后取反得到原码：
# 10000000 .. 00000110 符号位表示负数，后面正是6，所以就是 -6；

# 后来看到一个更加简单的方式：
# 补码取反后加1，也能得到原码：
# 取反的结果是：
# 10000000 .. 00000101 然后加1：
# 10000000 .. 00000110 正是 -6。
